Hypertext Transfer Protocol (HTTP) can be used to deliver video (e.g., live broadcasts or prerecorded content) to display devices over a networked environment. For example, a video can be streamed to a display device user using HTTP by first partitioning the video into a series of short video sections where each video section is placed on a server and identified by a Uniform Resource Locator (URL). Each video section typically can correspond to 2 seconds of the video; however, the video section can be longer or shorter than 2 seconds. An index file that contains the URLs of the video sections for the video also is stored on the server and identified by a URL. To play the video, software (“a client”) on a display device first retrieves the index file from the server and then sequentially follows each URL in the index file to retrieve from the server and display on the display device each video section.
More specifically, to play the video, the client can connect to the server, and submit a HTTP request message (e.g., an HTTP GET request) to retrieve the index file for the video. The client can connect to the server by creating a (Transmission Control Protocol) TCP connection to port 80 of the server. The server then can send a HTTP response message to the client containing the index file for the desired video. Based on the list of URLs in the index file for the video sections, the client can submit a series of HTTP request messages to the server to sequentially retrieve the video sections for the video.
Typically, once the playback buffer has reached a target size, to maintain a constant playback buffer size, the client submits an HTTP request message for the next video section in the list every 2 seconds.
To support adaptive streaming, the server stores a video at different bitrates so that a client can download portions of the video at different bitrates as network conditions changes. In some implementations, for example, the server stores the video sections at different bitrates and then the index file includes links to alternate index files for the video at the different bitrate streams. The client can switch to an alternate index file at any time during the streaming of the video as conditions warrant.
In other implementations, for example, instead of storing multiple video sections and for each video section storing different bitrate versions of the video section, the server stores one file for each bitrate using, for example, the MPEG-4 Part 14 (ISO/IEC 14496-14) (“MP4”) file format. Each MP4 file, which corresponds to the video at a particular bitrate, is segmented into MP4 video fragments. The index file includes a list of the available bitrates for the video and the list of video fragments for the video. To play a video, the client sequentially requests video fragments of the video at a particular bitrate. When the server receives the request, it extracts the MP4 video fragment from the MP4 file corresponding to the requested bitrate and sends the requested MP4 video fragment to the client.
In each of the implementations discussed above, video is streamed to client using HTTP via a series of HTTP request and response messages. The HTTP request messages typically are transmitted every 2 seconds. However, this results in bursty network traffic, which can have an adverse impact on network utilization. Other streaming protocols exist that also result in bursty network utilization characteristic.